package cn.stylefeng.guns.sys.modular.system.mapper;

import cn.stylefeng.guns.sys.modular.system.entity.Dept;
import cn.stylefeng.guns.sys.modular.system.entity.DingdingDayAttend;
import cn.stylefeng.guns.sys.modular.system.model.params.*;
import cn.stylefeng.guns.sys.modular.system.model.result.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 钉钉，前三十天，人员出勤数据 Mapper 接口
 * </p>
 *
 * @author zxd
 * @since 2022-03-08
 */
public interface DingdingDayAttendMapper extends BaseMapper<DingdingDayAttend> {

    /**
     * 获取钉钉人员，部门，打卡，关联关系表，简版，不同部门员工，按多个计算，分页用于展示
     *  员工，会有重复的
     *
     * @author wjk
     * @Date 2022-03-15
     */
    Page<DingdingEmpSimpleResult> empAndDeptAndDingdingAttendSimpleList(@Param("page") Page page,@Param("paramCondition") EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam,@Param("listEmpDept") List<DingdingEmpDeptResult> listEmpDept);



    /**
     * 获取钉钉人员，部门，打卡，关联关系表，简版，不同部门员工，按多个计算，分页用于展示,
     *  员工分组查询了，不会有重复数据
     *
     * @author wjk
     * @Date 2022-03-15
     */
    List<DingdingEmpSimpleResult> empAndDeptAndDingdingAttendSimpleListGroup(@Param("page") Page page,@Param("paramCondition") EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam);


    /**
     * 获取钉钉人员，部门，打卡，关联关系表，简版，不同部门员工，按多个计算,不分页，用于导出
     *  员工，会有重复的
     *
     * @author wjk
     * @Date 2022-03-21
     */
    List<DingdingEmpSimpleResult> empAndDeptAndDingdingAttendSimpleListNotPage(@Param("paramCondition") EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam,@Param("listEmpDept") List<DingdingEmpDeptResult> listEmpDept);




    /**
     * 将钉钉，部门分组合并起来，然后做为查询
     *
     * @author wjk
     * @Date 2022-03-22
     */
    List<DingdingEmpSimpleResult> exportEmpAndDeptArrayList(@Param("paramCondition") EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam,@Param("listEmpDept") List<DingdingEmpDeptResult> listEmpDept);




    /**
     * 根据钉钉编号，查询近二十天，关联的表单信息
     *
     * @author wjk
     * @Date 2022-03-18
     */
    List<DingdingEmpSimpleResult> queryRequestDetailByBh(@Param("paramCondition") EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam);


    /**
     * 获取钉钉人员，部门，打卡，关联关系表，简版，不同部门员工，按多个计算
     *  员工，会有重复的
     *
     * @author wjk
     * @Date 2022-03-15
     */
    List<DingdingEmpSimpleResult> empAndDeptAndDingdingAttendSimpleListByByBhList(@Param("paramList") List<String> list);



    /**
     * 获取钉钉人员，部门，打卡，关联关系表
     *
     * @author wjk
     * @Date 2022-03-11
     */
    List<DingdingEmpResult> empAndDeptAndDingdingAttendList();





    /**
     * 获取钉钉人员，部门，打卡，关联关系表包含分页
     *
     * @author wjk
     * @Date 2022-03-11
     */
    Page<DingdingDayAttendResult> empAndDeptAndDingdingAttendListPage(@Param("page") Page page);









    /**
     * 主从----------- 获取钉钉人员，部门，打卡，关联关系表包含分页，主 数据分页！！！！
     *
     * @author wjk
     * @Date 2022-03-15
     */
    Page<DingdingDayAttendResult> empAndDeptAndDingdingAttendListPageMaster(@Param("page") Page page);


    /**
     * 主从----------- 获取钉钉人员，部门，打卡，关联关系表包含分页，从 数据不分页！！！！
     *
     * @author wjk
     * @Date 2022-03-15
     */
    List<DingdingDeptResult> empAndDeptAndDingdingAttendListPageSlave();

    /**
     * 将人员标记为离职状态,根据编号列表
     * @param list
     * @return
     */
    Integer updateEmpDepartureByBhList(@Param("paramList") List<String> list);
    /**
     * 将该人员的打卡记录标记为不打卡,根据编号列表
     * @param list
     * @return
     */
    Integer updateEmpAttendDepartureByBhList(@Param("paramList") List<String> list);




    /**
     * 获取列表
     *
     * @author zxd
     * @Date 2022-03-08
     */
    List<DingdingDayAttendResult> customList(@Param("paramCondition") DingdingDayAttendParam paramCondition);

    /**
     * 获取map列表
     *
     * @author zxd
     * @Date 2022-03-08
     */
    List<Map<String, Object>> customMapList(@Param("paramCondition") DingdingDayAttendParam paramCondition);

    /**
     * 获取分页实体列表
     *
     * @author zxd
     * @Date 2022-03-08
     */
    Page<DingdingDayAttendResult> customPageList(@Param("page") Page page, @Param("paramCondition") DingdingDayAttendParam paramCondition);

    /**
     * 获取分页map列表
     *
     * @author zxd
     * @Date 2022-03-08
     */
    Page<Map<String, Object>> customPageMapList(@Param("page") Page page, @Param("paramCondition") DingdingDayAttendParam paramCondition);

    void batchInsert(@Param("list") List list);


    List<Dept> queryDepts(@Param("pid") Pid pid);

    /**
     * 查询所有的营运经理
     */
    Page<BtyPerformanceSelectResult> customPageListYyjl(@Param("page") Page pageContext, @Param("param") BtyPerformanceMonthInformationParam param);

    /**
     *查询所有的督导
     */
    Page<BtyPerformanceSelectResult> customPageListDd(@Param("page") Page pageContext, @Param("param") AttendAuditBtyAreaParam param);
    /*
    查询所有店名
     */
    Page<BtyPerformanceSelectResult> customPageListDm(@Param("page") Page pageContext, @Param("param") AttendAuditBtyAreaParam param);
    /*
        查询所有姓名
         */
    Page<BtyPerformanceSelectResult> customPageListXm(@Param("page")Page pageContext);

    //查询部门列表
    List<DingdingEmpDeptResult> getListEmpDept( @Param("paramCondition") EmpAndDeptAndDingdingAttendParam empAndDeptAndDingdingAttendParam);
}
